package com.gitee.feizns.quickstart.domain.page;

/**
 * 该对象承载分页查询的数据信息
 * @author feizns
 * @since 2019/7/7
 */
public interface PageVo {

    /**
     * 最大分页参数大小
     */
    long LARGEST_PAGE_SIZE = Integer.MAX_VALUE;

    /**
     * 默认的当前页
     */
    long DEFAULT_CURRENT = 1;

    /**
     * 默认的页大小
     */
    long DEFAULT_SIZE = 10;

    /**
     * 默认数据总量
     */
    long DEFAULT_TOTAL = 0;

    /**
     * 默认的页数
     */
    long DEFAULT_PAGES = 0;

    /**
     * 空分页对象
     */
    PageVo EMPTY = new PageVo() {};

    /**
     * 每页显示条目数
     * @return {@link Long}
     */
    default Long getSize() {
        return DEFAULT_SIZE;
    }

    /**
     * 页数（该类型数据一共多少页）
     * @return {@link Long}
     */
    default Long getPages() {
        return DEFAULT_PAGES;
    }

    /**
     * 当前页
     * @return {@link Long}
     */
    default Long getCurrent() {
        return DEFAULT_CURRENT;
    }

    /**
     * 数据总量
     */
    default Long getTotal() {
        return DEFAULT_TOTAL;
    }

    /**
     * 空分页响应
     * @return {@link PageVo}
     */
    static PageVo empty() {
        return EMPTY;
    }

    /**
     * 代理{@link PageAo}}
     * @param page {@link PageAo}
     * @return {@link PageVo}
     */
    static PageVo empty(PageAo page) {
        return new PageVo() {
            @Override
            public Long getSize() {
                return page.getSize();
            }
            @Override
            public Long getCurrent() {
                return page.getCurrent();
            }
        };
    }

}
